#include "pool.h"

ThreadPool::ThreadPool(int core, int max) {
    this->core = core;
    this->max = max;
    this->cur = 0; // 当前线程数
    this->leisure = 0; // 空闲线程数

    // 初始化信号量    信号量的个数初始化为0
    sem_init(&sem_manager, 0, 0);
    sem_init(&sem_task, 0, 0);

    // 创建管理者线程
    managerThread = new thread(&ThreadPool::managerRun, this);

    // 初始化管理者线程的工作模式
    this->mode = EMPTY;
}

ThreadPool::~ThreadPool() {

}

/* 添加任务 */
void ThreadPool::addTask(I_Thread* task) {
    mutexLock.lock();
    taskQueue.push(task); // 任务队列没有满的概念，可以一直来任务，处理任务交给管理者线程
    this->mode = TASK; // 设置管理者工作模式
    sem_post(&sem_manager); // 添加一个管理者信号量 唤醒管理者线程
    mutexLock.unlock();
}